package com.seanliao.nav.security;

import org.springframework.stereotype.Component;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * 用户与Principle的映射管理持有
 * SpringSecurity使用Principle作为key来管理会话，所以登录时需要更新Principle，而非创建Principle
 * 由于脱离SpringSecurity来管理数据，没有同步，故不做数据清除，使数据一直有效
 * TODO 或者遍历SessionRegistry的Principle也能够达到同样的效果
 */
@Component
public class UserPrincipleMapHolder {

    private final ConcurrentMap<Long, Object> userPrincipleMap = new ConcurrentHashMap<>();

    public void set(long userId, Object Principle) {
        userPrincipleMap.put(userId, Principle);
    }

    public Object get(long userId) {
        return userPrincipleMap.get(userId);
    }

}
